中断 && 异常 && 系统调用
2015-12-26
中断 && 异常 && 系统调用
基本概念
操作系统需要两种CPU状态: 内核态(Kernel Mode):运行操作系统程序 用户态(User Mode):运行用户程序
用户态 → 内核态 - 唯一途径 → 中断/异常/陷入机制
内核态 → 用户态 - 设置程序状态字PSW
系统调用就属于第二种. (访管指令)
中断和异常
中断和异常是操作系统的驱动.
中断(外中断), 是外部事件,导致硬件的中断: - I/O 中断 - 时钟中断 - 硬件故障
异常(内中断), 是由CPU运行的指令而产生的: - 系统调用 - 页故障 - 保护性异常 - 断点指令(调试程序) - 其他
示意图如下:
可以看出,最关键是的如何使用向量表找到中断程序的入口地址.
通过GDT找到段基址,通过IDT找到偏移量,这样就可以知道中断程序的入口地址了.
系统调用
这是write(1,"hello",7)的汇编代码,可以看到,通过压栈存储所有的变量,然后执行int 0x80 产生系统调用. 最后,举一个linux中系统调用的例子: